컴퓨터과학
어셈블리_06_ELF(Executable and Linkable Format) 파일 구조
작성자 : Heehyeon Yoo|2025-10-13
# Assembly# ELF# Linux# Binary Format
리눅스 환경의 실행 파일, 목적 파일(.o), 공유 라이브러리(.so)는 모두 ELF(Executable and Linkable Format) 형식을 따른다. 바이너리 분석을 위해 이해해야 할 핵심 구조는 다음과 같다.
1. ELF 헤더(Header)
파일의 가장 앞부분에 위치하며, 아키텍처, 엔디안, 그리고 진입점(Entry Point) 정보를 담고 있다.
readelf -h 명령어로 확인할 수 있다.
$ readelf -h ./hello
Entry point address: 0x401000
Entry Point는 프로그램이 메모리에 로드된 후 최초로 실행될 명령어의 주소를 나타내며, 분석의 시작점이 된다.
2. 섹션(Section)과 세그먼트(Segment)
- 섹션(Section): 코드(
.text), 데이터(.data) 등 논리적인 역할에 따라 데이터를 분류한 단위. 링킹 과정에서 중요하게 사용된다. (readelf -S로 확인) - 세그먼트(Segment): 운영체제가 파일을 메모리에 로드할 때 사용하는 단위. 권한(읽기/쓰기/실행)이 같은 섹션들을 묶어서 처리한다.(
readelf -l로 확인)
3. 주요 섹션과 권한
보안 분석 시 눈여겨보아야 할 주요 섹션은 다음과 같다.
.text: 실행 코드가 저장되는 영역. 읽기(R)와 실행(X) 권한만 부여된다. 실행 중 수정이 불가능하므로, 코드 패치는 파일 자체를 수정해야 한다..data: 초기화된 전역 변수 영역. 읽기(R)와 쓰기(W) 권한이 있다..rodata: 상수 문자열 등이 저장되는 영역. 읽기(R) 전용이다.
최근 운영체제는 데이터 영역(data, stack, heap)에서의 코드 실행을 방지하기 위해 NX(No-Execute) 비트를 설정한다.